package com.caesi.tacacaesifinal.dao;

import java.util.LinkedList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

import com.caesi.tacacaesifinal.model.Campeonato;
import com.caesi.tacacaesifinal.model.Equipe;

public class EquipeDAO {

    private final static String TAG = "com.caesi.copacaesifinal.EquipeDAO";
    protected static final String NOME_TABELA = "EQUIPE";
    protected static final String ID = "ID";
    protected static final String ID_CAMPEONATO = "idcampeonato";
    protected static final String INTEGRANTES = "nomesintegrantes";
    protected static final String NOME = "nome";

    protected static final String CREATE_TABLE = "CREATE TABLE if not exists "
            + NOME_TABELA + "(" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT,"
            + ID_CAMPEONATO + " INTEGER REFERENCES "
            + CampeonatoDAO.TABELA_CAMPEONATO + "(id), " + INTEGRANTES
            + " TEXT, " + NOME + " TEXT)";

    private static EquipeDAO instance;
    private SQLiteHelper sqLiteHelper;

    private EquipeDAO(SQLiteHelper sqLiteHelper) {
        this.sqLiteHelper = sqLiteHelper;
    }

    public static synchronized EquipeDAO getInstance(SQLiteHelper sqLiteHelper) {
        if (instance == null) {
            instance = new EquipeDAO(sqLiteHelper);
        }
        return instance;
    }

    public void delete(Equipe equipe) {
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();
        String whereClause = ID + "=?";
        String[] whereArgs = new String[1];
        whereArgs[0] = equipe.getId().toString();
        database.delete(NOME_TABELA, whereClause, whereArgs);
    }
    
    public void deleteDoCamponato(Long c){
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();
        String whereClause = ID_CAMPEONATO + "=?";
        String[] whereArgs = new String[1];
        whereArgs[0] = c.toString();
        database.delete(NOME_TABELA, whereClause, whereArgs);
    }

    public Equipe insert(Equipe e) {
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put(ID_CAMPEONATO, e.getIdCampeonato());
        String nomesJogadores = "";
        for (String jogador : e.getJogadores()) {
            nomesJogadores += jogador + ";";
        }
        cv.put(INTEGRANTES, nomesJogadores);
        cv.put(NOME, e.getNome());
        Long id = database.insert(NOME_TABELA, null, cv);
        e.setId(id);
        return e;
    }

    public void update(Equipe e) {
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();

        ContentValues cv = new ContentValues();
        cv.put(ID_CAMPEONATO, e.getIdCampeonato());
        cv.put(NOME, e.getNome());
        String nomesJogadores = "";
        for (String jogador : e.getJogadores()) {
            nomesJogadores += jogador + ";";
        }
        Log.e(TAG, "nomejogadores antes: " + nomesJogadores);
        nomesJogadores = nomesJogadores.substring(0,
                nomesJogadores.length() - 1);
        Log.e(TAG, "nomejogadores depois: " + nomesJogadores);
        cv.put(INTEGRANTES, nomesJogadores);

        String whereClause = ID + "=?";
        String[] whereArgs = new String[1];
        whereArgs[0] = e.getId().toString();

        database.update(NOME_TABELA, cv, whereClause, whereArgs);
    }

    public Equipe retrieveEquipe(Long idEquipe) {
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();
        String sql = "SELECT * FROM " + NOME_TABELA + " WHERE " + ID + "="
                + idEquipe;
        Cursor c = database.rawQuery(sql, null);
        Equipe equipe = null;
        if (c.getCount() > 0) {
            c.moveToFirst();
            equipe = cursor2Equipe(c);
        }
        c.close();

        return equipe;
    }

    public List<Equipe> retrieveEquipes(Long idCampeonato) {
        SQLiteDatabase database = sqLiteHelper.getWritableDatabase();
        String sql = "SELECT * FROM " + NOME_TABELA + " WHERE " + ID_CAMPEONATO
                + "=" + idCampeonato;
        Cursor c = database.rawQuery(sql, null);
        List<Equipe> equipes = new LinkedList<Equipe>();
        if (c.getCount() > 0 && c.moveToFirst()) {
            do {
                Equipe equipe = cursor2Equipe(c);
                equipes.add(equipe);
            } while (c.moveToNext());
        }
        c.close();

        return equipes;
    }

    private Equipe cursor2Equipe(Cursor c) {
        if (c.isClosed()) {
            return null;
        }
        Long id = c.getLong(c.getColumnIndex(ID));
        Long idCampeonato = c.getLong(c.getColumnIndex(ID_CAMPEONATO));
        String jogadores = c.getString(c.getColumnIndex(INTEGRANTES));
        String nome = c.getString(c.getColumnIndex(NOME));
        String[] arrayJogadores = jogadores.split(";");

        Equipe e = new Equipe();
        e.setId(id);
        e.setIdCampeonato(idCampeonato);
        e.setJogadores(arrayJogadores);
        e.setNome(nome);

        return e;
    }

}
